Jungo - Linux Beta 1
WinDriver Performance

Performance improvement checklist

Once your User Mode driver has been written and debugged, you might find that certain modules in your code do not operate as fast as you would like (for example - you might be missing some interrupts, or not accessing IO mapped regions fast enough).

Classify and solve the problem according to the table below:

 
 

Problem

Solution

#1

ISA Card - Accessing an IO mapped range on the card.

  • Try to convert multiple calls to WD_Transfer() to one call to WD_MultiTransfer()
  • If this does not solve the problem, handle the IO at Kernel Mode, by writing a kernel PlugIn.

#2

PCI Card - Accessing an IO mapped range on the card.

  • First, try to change the card from IO mapped to memory mapped by changing bit 0 of the address space PCI configuration register to 0, and then try the solutions for problem #3. You will probably need to re-program the EEPROM to initialize BAR0/1/2/3/4/5 registers with different values.
  • If this is not possible, try the solutions suggested for problem #1.
  • If this does not solve the problem, handle the IO at Kernel Mode, by writing a kernel PlugIn.

#3

Accessing a memory mapped range on the card.

  • Try to access memory without using WD_Transfer(), by using direct access to memory mapped regions
  • If this does not solve the problem, then there is a hardware design problem. You will not be able to increase performance by using any software design method, or by writing a Kernel PlugIn, or by writing a full kernel driver.

#4

Interrupt latency. (Missing interrupts, Receiving interrupts too late)

You need to handle the interrupts at Kernel Mode, by writing a kernel PlugIn.